阅读更多

0顶
0踩

移动开发

转载新闻 Android中HTTP相关的API

2015-06-01 10:25 by 副主编 mengyidan1988 评论(0) 有5397人浏览
Android中大多数应用都会发送和接受HTTP请求,在Android API中主要由两个HTTP请求的相关类,一个是HttpURLConnection,另一个是Apache HTTP Client。这两个类实现的HTTP请求都支持HTTPS协议,基于流的上传和下载,可配置超时时间,IPv6和连接池。

Apache HTTP Client

DefaultHttpClient和同类的AndroidHttpClient都是可扩展的类。它们有大量且灵活的API,适用于网页浏览器开发。同时它们比较稳定并且bug较少。但是繁多的API的现实下,对其改善与保持兼容性不可得兼,明显Android团队的精力已然不在Apache HTTP Client。

HttpURLConnection

HttpURLConnection是一个通用,轻量的实现,可以满足大多数的程序进行HTTP请求。这个类虽然一开始比较简陋,但是其主要的几个API使得我们更容易进行稳定改善。

连接池污染

在冻酸奶(Android 2.2)之前,HttpURLConnection有着一些烦人的bug。最烦人的就是调用一个可读的InputStream的close方法会污染连接池。我们需要禁用连接池绕开这个问题,如下代码可以禁用连接池。

private void disableConnectionReuseIfNecessary() {
    // HTTP connection reuse which was buggy pre-froyo
    if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
        System.setProperty("http.keepAlive", "false");
    }
}

压缩数据与大小

从2.3开始,我们默认对返回的响应进行了压缩,HttpURLConnection会自动为发出去的请求加上Accept-Encoding: gzip这个头信息。如果gzip压缩的响应有问题,可以通过下面代码禁用gzip。
urlConnection.setRequestProperty("Accept-Encoding", "identity");

由于HTTP中的Content-Length头信息返回的是压缩后的大小,所以我们不能使用getContentLength()来计算未压缩数据的大小。正确的做法应该是读取HTTP响应中的字节,直到InputStream.read()方法返回为-1.

HTTPs改进

从Gingerbread开始,增加了对HTTPs链接的优化。在进行HTTPs请求之前,HttpsURLConnection会尝试使用服务器名字指示(Server Name Indication),这种技术可以让多个HTTPs主机共享一个IP地址。在HTTPs请求中,HttpsURLConnection也支持压缩和会话标签(Session Tickets)。一旦连接失败,HttpsURLConnection会不使用上面的三个特性进行重试。这样即可以保证在连接时高效率地连接到最新的服务器,也可以在不破坏兼容性的同时连接到旧服务器。

响应缓存

从4.0开始,HttpURLConnection引入了响应缓存机制。一旦缓存创建,后续的HTTP请求会按照下面情况处理

  • 完全缓存的响应会直接从本地存储中读取,响应很快,不需要网络连接。
  • 有条件的缓存必须由服务端进行freshness验证,比如client发出一个请求,如”Give me /foo.png if it changed since yesterday”,然后服务器端要么返回最新的内容,要么返回304未修改的状态。如果内容不变,则不下载。
  • 没有缓存的响应需要服务器处理,然后这些请求被缓存下来。

对于低于4.0的版本,我们可以使用反射开启响应的缓存机制
rivate void enableHttpResponseCache() {
    try {
        long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
        File httpCacheDir = new File(getCacheDir(), "http");
        Class.forName("android.net.http.HttpResponseCache")
            .getMethod("install", File.class, long.class)
            .invoke(null, httpCacheDir, httpCacheSize);
    } catch (Exception httpResponseCacheNotAvailable) {
    }
}

当然,这里还需要服务器端设置HTTP缓存相关的头信息。

哪家强

在2.3之前的版本,Apache的HTTP请求响应实现比较稳定,bug也少,所以在那些版本上它的最好。

但是在2.3之后,毫无疑问,HttpURLConnection是最好的。它API精简实用,默认支持压缩,响应缓存等。最重要的这是Android团队重点投入的,而Apache的版本已经被抛弃了。所以还是使用HttpURLConnection吧。

原文信息:Android’s HTTP Clients

译文转自:技术小黑屋
来自: 技术小黑屋
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • jfreechart-1.0.19.7

    【资源介绍】:可以很方便的生成各种 【备注】: 亲爱的下载用户: 谢谢您光临CSDN... 【JAVA/JSP/DB高手】QQ群:17398054 【Linux高手群】QQ群:26976792 【百度Blog】:http://hi.baidu.com/zjqwll

  • JFreeChart 高手请进!

    我现在的项目中要求,图中的标签(就是 一个类型的)默认的是在正下方,不知道能不能改为在 右方。

  • 求JFreechart绘制折线图!!高手请进!!急!急!急!

    编译出的结果 没有折线图 求高手帮忙写个折线图的代码 00001.TXT的文件的数据是: 2009 11 05 25.38 25.46 24.85 25.05 28931192 727022400.000 2009 11 06 25.39 25.69 24.81 25.10 30297501 762726336.000 ...

  • JAVA 用JFreeChart绘制K线图 急!急!急!!求高手!

    import org.jfree.chart.JFreeChart; import org.jfree.chart.LegendItem; import org.jfree.chart.LegendItemCollection; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis....

  • jfreechart java_java jfreechart

    org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities,org.jfree.chart...

  • jfreeChart使用实例

    该资源为jfreeChart的入门实例代码,包含饼图,柱状图、折线图,图形类别很多,可用于新手学习参考(高手不在考虑范围之内),里面代码带有详细注释说明,一看就懂。本资源解压可运行。

  • jfreechart史上最全资料(含源码及文档、教程).zip

    做过图表的朋友一定听过JfreeChart这个组件,功能非常强大,是做报表必不可少的,如果您还不会或者不够深入,那么推荐您一定要好好学习它,让您成为高手,做图表不求人。 资源内容包括Java项目源代码、jfreechart-...

  • JFreeChart-1.0.9.zip

    【资源介绍】:可以很方便的生成各种 【备注】: 亲爱的下载用户: 谢谢您光临CSDN... 【JAVA/JSP/DB高手】QQ群:17398054 【Linux高手群】QQ群:26976792 【百度Blog】:http://hi.baidu.com/zjqwll

  • JFreeChart

    2009-10-21 10:02我们使用JFreeChart生成的折线图后,鼠标放上去可以动态显示坐标信息,但是怎么在编程中获得此横纵坐标的值呢,请高手指点。 代码如下: package jfreechart.good; import java.awt.Color; ...

  • 使用ajax刷新jfreechart,jfreechart生成图片不变

    给客户做了个图表报表,就是客户选了条件查询,画面上给出一个曲线图,我用的JFreeChart。生成图片没问题,可画面就是 不显示最新的图片。想来想去是IE缓存的事。IE为了节省时间,把图片给缓存了。所以每次取得都是...

  • java高手真经 系列,Java高手真经(高级编程卷)

    第21课搜索引擎——Lucene开源搜索引擎的使用\t 第22课缓存引擎——OSChache和Ehcache缓存引擎的使用\t 第23课任务调度——Quartz任务调度框架...\t 第25课报表服务——EclipseBIRT、JFreeChart和Cewolf的使用...

  • JFreeChart 折线图中,鼠标移动上去显示坐标信息。

    我们使用JFreeChart生成的折线图后,鼠标放上去可以动态显示坐标信息,但是怎么在编程中获得此横纵坐标的值呢,请高手指点。 代码如下: package jfreechart.good; import java.awt.Color; import java.awt....

  • JFreeChart圆柱图中文乱码

    windins xp,jfreechart版本用的是:1.0.11,有些代码关系到业务,就不贴了。。。下面是返回chart的实例 [code=&quot;java&quot;] ..... CategoryDataset categorydataset = defaultcategorydataset; JFreeChart ...

  • jfreechart柱形图链接问题

    我用jfreechart 生成了一个柱形图,在并且设置了生成链接,也就是每个柱子上都有超链接来请求另一个页面。可是,链接加上后,连问号都给转成了%形式,请高手指教,怎样搞定???这是我的代码。我是用的struts 架构...

  • 关于JFreeChart的standardlegend类找不到的解决办法

    昨天搞了一天,没解决JFREECHART中文的问题,大家说的都是LINUX的,一般说是字体不支持我找了一些高手收集的中文API里面有几个设置字体的类如下:TextTitle类:void setFont(Font font) 标题字体StandardLegend...

  • java 高手真经_Java高手真经_高级编程卷:Java.Web高级开发技术 pdf扫描版[124M]

    第22课 缓存引擎——OSChache和 Ehcache缓存引擎的使用 第23课 任务调度——Quartz任务调度框架的使用 第24课 身份认证——Acegi身份认证框架的使用 第25课 报表服务——Eclipse BIRT、JFreeChart和Cewolf的使用 ...

  • JFreeChart与AJAX+JSON+ECharts两种处理方式生成热词统计可视化图表

    本篇的思想:对HDFS获取的数据进行两种不同的可视化图表处理方式。第一种JFreeChar可视化处理生成图片文件查看。第二种AJAX+JSON+ECharts实现可视化图表,并呈现于浏览器上。...1、JFreeChart可视化处理(生成

  • 摘自高手

    能读下来并且能真正领会它,绝对高手!你能读完 Derby的源代码只有两种可能:1.你成为顶尖的高手――至少是数据库这部分; 2.你疯了。选择吧!!!!作为我自己我先选择Hypersonic SQL这样的数据库先研究,能过这一关,...

  • 618商品网页制作编程示例开发案列优质学习资料资源工具与案列应用场景开发文档教程资料.txt

    618商品网页制作编程示例开发案列优质学习资料资源工具与案列应用场景开发文档教程资料

  • 329_沁心茶叶商城小程序的设计与实现-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

Global site tag (gtag.js) - Google Analytics